/*
 * @lc app=leetcode.cn id=27 lang=cpp
 *
 * [27] 移除元素
 */

#include <limits.h>

#include <algorithm>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
using namespace std;

// @lc code=start
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int n = nums.size();        // 记录数组元素数量

        int fast = 0;               // 快指针，遍历原数组
        int slow = -1;              // 慢指针，记录符合要求的数组下标

        // 遍历原数组，删除值为 val 的元素
        for (fast = 0; fast < n; fast++) {
            if (nums[fast] == val) {
                continue;
            } else {
                nums[++slow] = nums[fast];
            }
        }
        
        // 删除数组中的多余元素
        for (int i = 0; i < fast - slow - 1; i++) {
            nums.pop_back();
        }
        
        // 返回剩余元素数量
        return slow + 1;
    }
};
// @lc code=end

